#include"process.h"
#include<string.h>
#include<unistd.h>
//这个进度条虽然能跑   但是无法正常使用

#define NUM 101       //这是因为字符串的结尾要加/0  所以多加一个
#define STYLE '#'


//这个是第二个版本的进度条  version2
void FlushProcess(double total,double current)   //这个就是计算对应比率的函数
{
	char buffer[NUM];
	memset(buffer,0,sizeof(buffer));    //统一把buffer清零
	//给进度条加转   也就是在后面多打印一个   因为每一次cnt都是增加的  %len 就只能是0123   对应的也就是|/-\\

	const char* lable="|/-\\";
	int len = strlen(lable);     //上面的都应该要有  也就是缓冲区啥的


	//旋转光标实际上和下载多少无关   而是跟函数被调用的次数有关
	static int cnt = 0;     //这个就是对应的调用次数


	//只是这个就不需要自己进行循环了
	//第一步   填充#
	int num = (int)(current*100/total);    //计算百分比 并且进行取整  
	for(int i=0;i<num;i++)
	{
	   buffer[i]=STYLE;
	}
	double rate= (current*100)/total;        //计算进度比率
	
	cnt %= len;
	printf("[%-100s][%.2f%%][%c]\r",buffer,rate,lable[cnt]);
	cnt++;   //加转和保留小数

	fflush(stdout);
}



//这是第一个版本的进度条   version1
void process_v1()
{
	char buffer[NUM];
	memset(buffer,0,sizeof(buffer));    //统一把buffer清零
	//给进度条加转   也就是在后面多打印一个   因为每一次cnt都是增加的  %len 就只能是0123   对应的也就是|/-\\

	const char* lable="|/-\\";
	int len = strlen(lable);

	int cnt =0;
	while(cnt<=100)
	{
	  //先打印(这里的%100  是预留100个字符  不然就是一直扩充括号中内容  但是默认右对齐，所以想左对齐就%-100)
	  printf("[%-100s][%d%%][%c]\r",buffer,cnt,lable[cnt%len]);   
	  //防止每次打印都是要换行   就把\n替换为\r  但是每一次的打印如果是\r 就是存在于缓冲区  所以需要每一次都刷新一下
	  //后面的[%d] 就是对应进度条后面的百分比数字   如果想在数字后面加上百分号   就可以%%   或者  /%
	  buffer[cnt]=STYLE;    //每次打印要多一个 #
	  fflush(stdout);    //进行刷新
	  cnt++;
	  usleep(50000);
	}
	printf("\n");
}
